perm filename DSKMON[SS,SYS]1 blob sn#283505 filedate 1977-05-26 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00006 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	TITLE DSKMON DISK STATISTICS MONITOR
C00003 00003	GO:	RESET
C00005 00004	SWR:	JRST 2,@[.+1]		LEAVE IOT USER MODE
C00012 00005	DPERCNT:IDIVI A,=100
C00015 00006	DEFINE ISYMS
C00020 ENDMK
C⊗;
TITLE DSKMON DISK STATISTICS MONITOR

A←1
B←2
C←3
D←4
E←5
T←6
TT←7
Q←10
DDB←11
DAT←12
S←13
L←14

P←17

DDPMAX←←1000		;MAXIMUM SIZE OF DATA DISK PROGRAM
FLINE←←3		;FIRST TEXT LINE TO DISPLAY ON
FSLINE←←3*=12		;FIRST SCAN LINE

DEFINE CW (OP1,D1,OP2,D2,OP3,D3) <
	BYTE (8) D1,D2,D3 (3) OP1,OP2,OP3,4
>

FN←←1
CH←←2
COL←←3
HILINE←←4
LOLINE←←5

HS←←400000		;FOR REFERENCES TO SYSTEM CORE

DEFINE INFORM (A,B) <
PRINTS /A=B
/
>

DEFINE DDCLR (ADR,NWDS) <
ZZ←←0
REPEAT NWDS,<
	ADR+ZZ
ZZ←←ZZ+1
>
>

;LOW CORE POINTERS
CHKBEG←←223
SYSTOP←←265
GO:	RESET
	MOVE P,[-100,,PDL-1]
	SETZM FREEZE
	PUSHJ P,SYMLK		;LOOKUP SYSTEM SYMBOLS
	DPYSIZ 2*1000+2
	DPYPOS -600
	MOVEI A,CHKBEG
	PEEK A,
	MOVEI A,233000		;KLUDGE TO GET PATCH AREA
	MOVEM A,SLOPC
	LSH A,-9		;# LO PIECE PAGES
	MOVEI B,SYSTOP
	PEEK B,
	PEEK B,
	MOVEM B,FHIADR
	LSH B,-9+5		;STARTING HI PIECE PAGE # * 40
	ADDI B,10		;SET 2-PEICE FLAG
	HRL B,A
	GETHI B,
	JRST 4,.
	SETOM SWCNT
	MOVE A,[400017,,SWR]
	SKIPN DEBUG
	SPCWGO A,		;START UP SPACEWAR
	SKIPE DEBUG
	JRST SWR
MLOOP:	INCHRW A
	TRNN A,600
	JRST MLOOP
	LDB B,[POINT 7,A,35]
	CAIL B,"a"
	CAILE B,"z"
	CAIA
	SUBI B,40
	CAIN B,"E"
	PUSHJ P,EXT
	CAIN B,40
	SETCMM FREEZE
	JRST MLOOP

EXT:	SPCWAR 'SSW'		;KILL THE SPACEWAR MODULE
	PUSH P,DDCLRS+1
	SETZM DDCLRS+1
	DDUPG DDCLRS		;WAIT FOR SPACE WAR LEVEL TRANSFER TO FINISH
	POP P,DDCLRS+1
	DDUPG DDCLRS		;CLEAR THE SCREEN
	RESET			;RESET THE WORLD
	EXIT
SWR:	JRST 2,@[.+1]		;LEAVE IOT USER MODE
	SKIPE FREEZE
	JRST SWXIT
	SKIPE DEBUG
	JRST SWDEB
	AOSE SWCNT
	DISMIS
	MOVNI A,4
	MOVEM A,SWCNT
SWDEB:	MOVE P,[-100,,SPWPDL-1]
	PUSHJ P,SYMEXM		;EXAMINE SYSTEM SYMBOLS
	PUSHJ P,DDPSET
	MOVE Q,[-DDPMAX,,DDPRG1-1]
	PUSHJ P,MKDIS
	PUSHJ P,CLRRST		;CLEAR THE REST OF THE LINES
	PUSH Q,[0]
	HLRO Q,Q
	ADDI Q,DDPMAX+DDPRG1-DDPROG+1	;SIZE OF DISPLAY PROGRAM
	MOVEM Q,DDLWRD		;STORE IN HEADER
	DDUPG DDHEAD
SWXIT:	SKIPN DEBUG
	DISMIS
	JRST SWR

MKDIS:	MOVE A,NSWPOP
	MOVE D,[440700,,DSWPOP]
	PUSHJ P,DDECOUT
	PUSHJ P,DCRLF
	MOVE A,NTSTAR
	MOVE D,[440700,,DTSTAR]
	PUSHJ P,DDECOUT
	PUSHJ P,DCRLF
	MOVE A,NSWPOP
	MOVE B,NTSTAR
	ADD B,A
	IMULI A,=10000
	IDIV A,B
	MOVE D,[440700,,DPER1]
	PUSHJ P,DPERCNT
	PUSHJ P,DCRLF
REPEAT 0,<
	MOVE A,SWPTWC
	MOVE D,[440700,,DSWPTW]
	PUSHJ P,DDECOUT
	PUSHJ P,DCRLF
	MOVE A,DSKTWC
	MOVE D,[440700,,DDSKTW]
	PUSHJ P,DDECOUT
	PUSHJ P,DCRLF
>;REPEAT 0
	MOVE A,SWPTWC
	MULI A,=10000
	DIV A,DSKTWC
	MOVE D,[440700,,DPER2]
	PUSHJ P,DPERCNT
	PUSHJ P,DCRLF
	MOVE A,SWPTWC
	IDIV A,NSWPOP
	MOVE D,[440700,,DSIZ1]
	PUSHJ P,DDECOUT
	MOVEI A,[ASCIZ / WORDS
/]
	PUSHJ P,DTYPE
	MOVE A,DSKTWC
	SUB A,SWPTWC
	IDIV A,NTSTAR
	MOVE D,[440700,,DSIZ2]
	PUSHJ P,DDECOUT
	MOVEI A,[ASCIZ / WORDS
/]
	PUSHJ P,DTYPE
	DMOVE D,DKTIME
	DIV D,[10000*=1000000]	;CONVERT TO SECONDS
	MOVE A,SWPTWC
	ADD A,DSKTWC		;TOTAL WORDS TRANSFERRED
	IDIV A,D		;AVERAGE TRANSFER RATE
	MOVE D,[440700,,DRATE]
	PUSHJ P,DDECOUT
	MOVEI A,[ASCIZ \ W/S
\]
	PUSHJ P,DTYPE
	MOVE A,NJRNUL
	SUB A,LNJRNUL
	MOVE B,UPTIME
	SUB B,LUPTIME
	IMULI A,=100
	IDIV A,B		;% OF RECENT UPTIME THAT WAS WASTED
	MOVE D,[440700,,DPER3]
	PUSHJ P,DDECOUT
	PUSHJ P,DCRLF
	MOVE A,NWSCHED
	SUB A,LNWSCHED
	IMULI A,=100
	MOVE B,UPTIME
	SUB B,LUPTIME
	IDIV A,B
	MOVE D,[440700,,DPER4]
	PUSHJ P,DDECOUT
	PUSHJ P,DCRLF
	MOVE A,DQCNT
	MOVE D,[440700,,DQLEN]
	PUSHJ P,DDECOUT
	PUSHJ P,DCRLF
	MOVEI L,FQLIN
	PUSHJ P,DINI
	PUSHJ P,DQUEUE
	POPJ P,

DTAB:	MOVEI B,40
	PUSHJ P,.+1
	PUSHJ P,.+1
	PUSHJ P,DCHR
DCHR:	IDPB B,D
	TLNE D,760000
	POPJ P,
	PUSH Q,DWORD
DINI:	SETZM DWORD
	AOS DWORD
	MOVE D,[POINT 7,DWORD]
	POPJ P,

DFIN:	MOVE A,DWORD
	ANDCMI A,1
	JUMPE A,CPOPJ
	PUSH Q,DWORD
	POPJ P,

DEXT:	HLRZ A,A
	SKIPA C,[POINT 6,A,17]
DNAM:	MOVE C,[POINT 6,A]
DNAM1:	ILDB B,C
	ADDI B,40
	PUSHJ P,DCHR
	TLNE C,770000
	JRST DNAM1
	MOVEI B,"."
	POPJ P,

DPPN:	MOVEI B,"["
	PUSHJ P,DCHR
	PUSH P,A
	PUSHJ P,DEXT
	MOVEI B,","
	PUSHJ P,DCHR
	POP P,A
	HRLZ A,A
	PUSHJ P,DEXT
	MOVEI B,"]"
	JRST DCHR

DEOL:	MOVEI B,15
	PUSHJ P,DCHR
	MOVEI B,12
	AOJA L,DCHR

DDEC:	PUSH P,OUTXCT
	MOVE B,[PUSHJ P,DCHR]
	MOVEM B,OUTXCT
	PUSHJ P,DECOUT
	POP P,OUTXCT
	POPJ P,

DOCT:	PUSH P,OUTXCT
	MOVE B,[PUSHJ P,DCHR]
	MOVEM B,OUTXCT
	PUSHJ P,OCTOUT
	POP P,OUTXCT
	POPJ P,

DQUEUE:	SKIPN T,DQCNT		;SIZE OF DISK QUEUE
	POPJ P,
	MOVE TT,MOPTR
	SUB TT,AQBEGIN		;RELATIVE OUTPUT POINTER
	MOVE S,TT		;REMEMBER WHERE WE STARTED
DQUE1:	SKIPN C,QBEGIN(TT)	;GET DISK QUEUE ENTRY
	JRST DQUE2
	HLRZ DDB,C
	HRRZ DAT,C
	SKIPN A,@NAMPTR
	JRST DQUE2
	PUSHJ P,DNAM
	SKIPN A,@EXTPTR
	JRST DQUE1A
	PUSHJ P,DCHR		;PRINT THE DOT
	PUSHJ P,DEXT
DQUE1A:	MOVE A,@PPNPTR
	PUSHJ P,DPPN
	PUSHJ P,DTAB
	PUSHJ P,PSUBR
	PUSHJ P,DEOL
	SOJLE T,CPOPJ
DQUE2:	ADDI TT,1
	CAIN TT,QEND-QBEGIN
	MOVEI TT,0
	CAIE TT,(S)		;SKIP IF WE HAVE LOOPED BACK TO WHERE WE STARTED
	JRST DQUE1
	POPJ P,

CLRRST:	SUBI L,=35		;- NUMBER OF LINES TO CLEAR
CLRRS1:	MOVEI B,40
	PUSHJ P,DCHR
	MOVEI B,15
	PUSHJ P,DCHR
	MOVEI B,12
	PUSHJ P,DCHR
	AOJL L,CLRRS1
	PUSHJ P,DFIN
	POPJ P,

PSUBR:	MOVSI A,-NSUBRS
PSUBR1:	CAME DAT,SBRVAL(A)
	AOBJN A,PSUBR1
	JUMPL A,PSUBR2		;JUMP IF FOUND
	MOVE A,DAT
	JRST DOCT

PSUBR2:	MOVE A,SBRNAM(A)
	JRST DNAM
DPERCNT:IDIVI A,=100
	PUSH P,B
	PUSHJ P,DDECOUT
	MOVEI A,"."
	IDPB A,D
	POP P,A
	MOVEI B,"0"
	CAIGE A,=10
	IDPB B,D
	JRST DDECOUT

SYMLK:	MOVSI A,-NSYMS
SYMLK1:	MOVE B,SYMNAM(A)
	MOVE C,BLKNAM(A)
	MOVEI D,B
	.SYML D,
	JRST 4,.		;LOST
	MOVEM D,SYMVAL(A)
	AOBJN A,SYMLK1
CPOPJ:	POPJ P,

SYMEXM:	MOVSI A,-NSAVTB
SYMEX0:	HLRZ B,SAVTB(A)
	HRRZ C,SAVTB(A)
	MOVE B,(B)
	MOVEM B,(C)
	AOBJN A,SYMEX0
	MOVSI A,-NEVALS
SYMEX1:	HLRZ B,EVALTB(A)
	MOVE B,(B)		;GET ADDRESS OF SYSTEM SYMBOL
	MOVE B,HS(B)		;GET CONTENTS OF ADDRESS IN SYSTEM
	HRRZ C,EVALTB(A)
	MOVEM B,(C)
	AOBJN A,SYMEX1
	MOVE B,ADKTIME
	DMOVE B,HS(B)		;GET DOUBLE WORD TIME
	DMOVEM B,DKTIME
	HRLZ A,AQBEGIN
	ADD A,[HS,,QBEGIN]
	BLT A,QBEGIN+27
	MOVE A,SLOPC		;NUMBER OF WORDS IN GETHI LOW PIECE
	ADDI A,HS		;STARTING ADDRESS OF GETHI HI PIECE
	SUB A,FHIADR		;SUBTRACT OFFSET OF SYSTEM ADDRESS OF HI PIECE
	HRLI A,DDB
	MOVE B,A
	ADD B,AFILNAM
	MOVEM B,NAMPTR
	MOVE B,A
	ADD B,AFILEXT
	MOVEM B,EXTPTR
	MOVE B,A
	ADD B,AFILPPN
	MOVEM B,PPNPTR
	POPJ P,

DDPSET:	MOVSI A,-NDDCLR
	MOVEI B,1
DDPSE1:	MOVEM B,@DDPCTB(A)
	AOBJN A,DDPSE1
	POPJ P,

DCRLF:	MOVEI A,[BYTE (7) 15,12]
DTYPE:	HRLI A,440700
DTYPE1:	ILDB B,A
	JUMPE B,CPOPJ
	IDPB B,D
	JRST DTYPE1

DDECOUT:PUSH P,OUTXCT
	MOVE B,[IDPB B,D]
	MOVEM B,OUTXCT
	PUSHJ P,DECOUT
	POP P,OUTXCT
	POPJ P,

DECOUT:	PUSH P,C
	MOVEI C,=10
	PUSHJ P,NUMOUT
	POP P,C
	POPJ P,

OCTOUT:	PUSH P,C
	MOVEI C,10
	PUSHJ P,NUMOUT
	POP P,C
	POPJ P,

NUMOUT:	IDIVI A,(C)
	JUMPE A,NUMOU1
	HRLM B,(P)
	PUSHJ P,NUMOUT
	HLRZ B,(P)
NUMOU1:	ADDI B,"0"
	XCT OUTXCT
	POPJ P,
DEFINE ISYMS
<FOR I IN (NTSTAR,NSWPOP,DSKTWC,SWPTWC,DQCNT,QBEGIN,MIPTR,MOPTR,FILNAM,<FILEXT>
,FILPPN,DKTIME,NJRNUL,UPTIME,NWSCHED)>

DEFINE ISUBRS
<FOR I IN (LOOKI,DIDMPI,DMPIBI,DIDMPO,DMPOBI,DRAUFY,DRAUFD,DCLOI,SPREAD,<DIRSRC>
,DIRI1,DIRI2,GGRETI,RB4WCK,DELFIL,DIBUFI,DIBUFO,DCLSO5,DRINT,DRINT1,SATOUT)>

DEFINE SYMS (J)
<IFDIF <J><UNUSED><RADIX50 0,J>>

SYMNAM:	ISYMS <SYMS(I)
>
	ISUBRS <SYMS(I)
>
NSYMS←←.-SYMNAM

BLKNAM:	REPEAT 8,<0>
	REPEAT 3,<RADIX50 0,STANFO>
	REPEAT NSYMS-8-3,<0>

DEFINE SYMS ! (J)
<IFDIF <J><UNUSED><A!J:0>>
DEFINE SYMS1 (J)
<IFDIF <J><UNUSED><0>>

SYMVAL::ISYMS <SYMS(I)
>
SBRVAL:	ISUBRS <SYMS1(I)
>
NSUBRS←←.-SBRVAL

DEFINE SYMS (J)
<IFDIF <J><UNUSED><SIXBIT /J/>>
SBRNAM:	ISUBRS <SYMS(I)
>

EVALTB:	ANTSTAR,,NTSTAR
	ANSWPOP,,NSWPOP
	ADSKTWC,,DSKTWC
	ASWPTWC,,SWPTWC
	ADQCNT,,DQCNT
	AMIPTR,,MIPTR
	AMOPTR,,MOPTR
	ANJRNUL,,NJRNUL
	AUPTIME,,UPTIME
	ANWSCHED,,NWSCHED
NEVALS←←.-EVALTB

SAVTB:	NJRNUL,,LNJRNUL
	UPTIME,,LUPTIME
	NWSCHED,,LNWSCHED
NSAVTB←←.-SAVTB

NTSTAR:	0
NSWPOP:	0
DSKTWC:	0
SWPTWC:	0
DQCNT:	0
DKTIME:	BLOCK 2
NJRNUL:	0
LNJRNUL:0
UPTIME:	0
LUPTIME:0
NWSCHED:0
LNWSCHED:0

QBEGIN:	BLOCK 30		;COPY OF THE SYSTEM'S DISK QUEUE
QEND::
MIPTR:	0
MOPTR:	0

PDL:	BLOCK 100
SPWPDL:	BLOCK 100
SWCNT:	0
DEBUG:	0
SLOPC:	0			;NUMBER OF WORDS IN GETHI LOW PIECE
FHIADR:	0			;FIRST SYSTEM ADDRESS IN GETHI HI PIECE
OUTXCT:	OUTCHR B
NAMPTR:	0
EXTPTR:	0
PPNPTR:	0
FREEZE:	0

DDHEAD:	600000,,DDPROG
DDLWRD:	0
	0
	DDPRGL

DDPROG:	CW(FN,46,FN,46,FN,46)
DDPRGL:	CW(COL,2,HILINE,FSLINE⊗-4,LOLINE,FLINE&17)
	ASCID /          DSKMON  Disk statistics monitoring program

NUMBER OF SWAP OPS = /
DSWPOP:	BLOCK 3		;ROOM FOR 11 DIGITS, CR AND LF
	ASCID /NUMBER OF OTHER DISK OPS = /
DTSTAR:	BLOCK 3
	ASCID /PERCENTAGE OF SWAP OPS = /
DPER1:	BLOCK 3
REPEAT 0,<
	ASCID /TOTAL WORDS SWAPPED = /
DSWPTW:	BLOCK 3
	ASCID /TOTAL WORDS TRANSFERRED = /
DDSKTW:	BLOCK 3
>;END REPEAT 0
	ASCID /PERCENTAGE OF WORDS SWAPPED = /
DPER2:	BLOCK 3
	ASCID /AVERAGE SWAP TRANSFER SIZE = /
DSIZ1:	BLOCK 3
	ASCID /AVERAGE DISK TRANSFER SIZE = /
DSIZ2:	BLOCK 3
	ASCID /AVERAGE DISK TRANSFER RATE = /
DRATE:	BLOCK 3
	ASCID /PERCENTAGE OF WASTED TICKS = /
DPER3:	BLOCK 3
	ASCID /WSCHEDS PER 100 TICKS = /
DPER4:	BLOCK 3
	ASCID /DISK QUEUE LENGTH = /
DQLEN:	BLOCK 3
	ASCID /DISK QUEUE:
/
FQLIN←←=12+FLINE
DDPRG1:	BLOCK DDPMAX
	0

DWORD:	0

DDPCTB:	DDCLR DSWPOP,3
	DDCLR DTSTAR,3
	DDCLR DPER1,3
;	DDCLR DSWPTW,3
;	DDCLR DDSKTW,3
	DDCLR DPER2,3
	DDCLR DSIZ1,3
	DDCLR DSIZ2,3
	DDCLR DRATE,3
	DDCLR DQLEN,3
	DDCLR DPER3,3
	DDCLR DPER4,3
NDDCLR←←.-DDPCTB

DDCLRS:	DDCLRP
	2
	0
	0

DDCLRP:	CW(FN,17,FN,17,CH,0)
	0

	END GO